تحليل سجلات الاستماع لحلقات البوكسات


الهدف الرئيسي من هذا التحليل هو فهم أعمق لسلوك المستخدم وتفضيلاته. نسعى لتحديد أنواع المحتوى الذي يتابعه، بالإضافة إلى معرفة البلد الذي يقيم فيه. هذا سيمكننا من التعرف على أهم البودكاستات الرائجة في منطقته الجغرافية.

وبناءً على هذه المعلومات، نقوم بتطوير اقتراحات مخصصة للبودكاستات التي تتناسب تمامًا مع اهتمامات المستخدم. الهدف هو تعزيز تجربته وتشجيعه على الاستمرار في مشاهدة المحتوى المفضل لديه، مما يضمن له تجربة ممتعة.


1. قراءة ومعالجة البيانات

- فهم واستكشاف البيانات

تُقدّم الدالة info نظرة شاملة على بنية البيانات، بما في ذلك أسماء الأعمدة، أنواع بياناتها، وعدد القيم غير المفقودة في كل عمود. من خلال تحليل مخرجات info للبيانات التي لدينا، نلاحظ أن عدد القيم متساوٍ في جميع الأعمدة ويساوي العدد الكلي للاسطر. هذا يشير إلى عدم وجود أي قيم مفقودة ضمن مجموعات البيانات التي نعمل عليها، مما يقلل من الحاجة لمعالجة البيانات المفقودة في هذه المرحلة.

إضافة إلى ذلك، فقد تأكدنا من أن أنواع البيانات المخصصة لكل عمود تتوافق تمامًا مع طبيعة المعلومات التي يمثلها العمود. هذا يعني أن الأعمدة الرقمية مُعرّفة كأرقام، والأعمدة النصية كـ "كائنات" (strings)، وهكذا. هذا التحقق الأولي يضمن أن البيانات جاهزة للتحليل دون الحاجة لتغيير أنواع البيانات، مما يسهل سير العمل ويقلل من الأخطاء المحتملة.


لقد تأكدت بشكل أعم من عدم وجود أي قيم مفقودة في البيانات. قمت بحساب عدد القيم المفقودة في كل عمود، وكانت النتيجة صفر في جميع الأعمدة. هذا يؤكد أن مجموعات البيانات لدي كاملة.

- لننتقل الآن إلى الخطوة التالية وهي البحث عن وجود قيم غير منطقية (Outliers) ضمن مجموعات البيانات.

تحتوي هذه البيانات على معلومات حول العمر، الجنس، والمدينة. بالتركيز على العمر كقيمة عددية، استخدمنا الدالة describe لفهم توزيعه. لقد وجدنا أن الأعمار تتراوح بين 19 و 59 عامًا، وهو نطاق مناسب تمامًا للمشاهدين المستهدفين لحلقات البودكاست.

علاوة على ذلك، يبلغ المتوسط الحسابي للعمر 40 عامًا، وهو ما يُعد عمرًا مثاليًا لمشاهدي البودكاست، مما يشير إلى أن غالبية المستخدمين ضمن الفئة العمرية التي تستهلك هذا النوع من المحتوى. هذه النتائج تؤكد عدم وجود أي قيم متطرفة (Outliers) غير منطقية في بيانات العمر.


بعد أن انتهينا من تحليل بيانات العمر، لننتقل الآن إلى استكشاف توزيع بيانات الجنس والمدينة ضمن نفس مجموعة البيانات.

تشير البيانات إلى أن الرجال أقل مشاهدة لحلقات البودكاست مقارنة بالإناث.

الأردن هو البلد الذي يضم أكبر عدد من مشاهدي البودكاست.

نلاحظ أن البيانات المتوفرة لا تحتوي على عناوين وصفية للحلقات، بل تقتصر على أرقام متسلسلة من "Episode 1" إلى "Episode 30". لو كانت هناك عناوين أو أوصاف محددة للحلقات، لتمكّنا من تطبيق معالجة اللغات الطبيعية (NLP) لاستخلاص معلومات قيمة حول محتوى كل حلقة. هذا كان سيفتح آفاقًا مستقبلية لـ توقع عناوين البودكاست المقترحة للمستخدم بناءً على العناوين التي يشاهدها.

أما فيما يخص عمود التصنيفات (category)، فتشير البيانات الحالية إلى أن الحلقات الأكثر شيوعًا لدينا هي حلقات الرياضة، والتي يبلغ عددها 9 حلقات.

مخطط لتصنيفات الحلقات المتاحة وعددها


في تحليلنا للبيانات، وعلى الرغم من أن جميع الأعمدة تتكون من أرقام، إلا أن تركيزنا ينصب على عمود المدة الزمنية (duration_seconds)، مع استبعاد العمليات الإحصائية على أعمدة الـ ID.

بناءً على بيانات الاستماع المتوفرة (listens_df)، لاحظنا ما يلي:

تقييم المدة:

تُعتبر المدة القصوى البالغة 30 دقيقة طبيعية ومنطقية تمامًا في سياق حلقات البودكاست. أما بالنسبة لأدنى مدة، فإن وجود "صفر ثانية" يشير إلى أن هذه المدة غير منطقية كاستماع حقيقي لحلقة بودكاست. بينما يمكن أن تكون الحلقات القصيرة جدًا - مثل دقيقة واحدة - بمثابة مقاطع دعائية، مقتطفات سريعة، أو إعلانات. تتناسب الحلقات الأطول مع المحتوى التعليمي أو الحوارات المتعمقة.

بشكل عام، تتراوح مدة البودكاستات الشائعة كما يلي:

الخلاصة: بما أن أقصى مدة (30 دقيقة) تقع ضمن النطاق الطبيعي لمختلف أنواع البودكاست، فلا توجد حاجة لإزالتها كـ "قيمة متطرفة". ومع ذلك، فإن القيمة "صفر ثانية" تُعتبر قيمة غير منطقية ولا تمثل استماعًا فعليًا لحلقة، ولذلك يجب رفضها. سنعتمد على مدة الدقيقة الواحدة كحد أدنى مقبول للاستماع الفعلي لحلقات البودكاست. هذه القيم تمثل مدد استماع واقعية ومتوقعة.


سأقوم بحذف جميع حلقات البودكاست التي تبلغ مدتها صفر ثانية, مع إضافة عمود للدقائق

لنلقِ نظرة على المدة الزمنية الأكثر مشاهدة ضمن البودكاستات. يوضح المخطط أن أكثر مدة للمشاهدة هي 5 دقائق، مما يشير إلى أن معظم الأشخاص توقفوا عند هذه الدقيقة ولم يكملوا الاستماع للحلقة.

- ربط البيانات معًا باستخدام المعرّفات المناسبة (user_id وepisode_id).

2. تحليل البيانات

- ما أكثر فئات الحلقات استماعا

تُعدّ الرياضة من أكثر الفئات استماعًا

- ما الفرق في متوسط مدة الاستماع بين الذكور والإنات
- ما متوسط عدد الحلقات التي يستمع لها المستخدم الواحد
- بالنظر إلى البيانات المتوفرة، ما هو نوع التحليل أو المؤشر الإضافي الذي تعتقد أنه سيكون مفيدًا لفهم سلوك المستخدم؟ ولماذا؟

يهدف هذا المخطط إلى فهم تفضيلات الفئات حسب البلد، مما يعد خطوة أساسية في تحليل سلوك المستخدم واقتراح محتوى مناسب له.

لقد كشف تحليلنا لتوزيع الفئات عبر البلدان المختلفة عن اهتمامات متباينة:

تساعدنا هذه الرؤى على تقديم اقتراحات بودكاستات مخصصة تتناسب مع الاهتمامات المحلية لكل دولة، مما يعزز تجربة المستخدم ويزيد من تفاعله مع المحتوى.

إنشاء جدول يلخص المدد الزمنية الأكثر شيوعًا للمشاهدة لكل فئة من فئات المحتوى. هذا يساعد في فهم:

هل يميل مستمعو الرياضة، على سبيل المثال، إلى مشاهدة حلقات أقصر أو أطول مقارنة بمستمعي فئة "Society"؟ ما هو النطاق الزمني الأمثل للحلقات التي تنتمي إلى كل فئة؟ يمكن أن تكون هذه المعلومات مفيدة جدًا للمساعدة في تحديد المحتوى الأمثل لاقتراحه للمستخدمين، ليس فقط بناءً على الفئة المفضلة لديهم، بل أيضًا بناءً على المدة الزمنية المفضلة لتلك الفئة.

فهم العلاقة بين فئات البودكاست التي يشاهدها المستخدمون وأعمارهم.

يُساعد هذا التحليل في بناء فهم أعمق لجمهور كل فئة، مما يفيد في استهداف المحتوى بشكل أفضل وتقديم توصيات أكثر دقة بناءً على عمر المستخدم واهتماماته.

توزيع إلى تحليل توزيع مشاهدات البودكاست حسب الفئة والجنس.

يُساعد هذا التحليل في فهم تفضيلات المحتوى بناءً على الجنس، مما يُعد مفيدًا لتخصيص المحتوى واستهداف الجمهور بشكل أكثر فعالية عند تقديم اقتراحات البودكاست.

3. توليد توصيات مبدئية


الفكرة العامة لاقتراح التوصية (الدالة recommend_episodes)

تهدف هذه الدالة إلى تقديم توصيات مخصصة لحلقات بودكاست جديدة للمستخدمين، بناءً على اهتماماتهم السابقة. تُركز الفكرة على تحليل ما استمع إليه المستخدم بالفعل، ومن ثم اقتراح محتوى مشابه لم يقم بمشاهدته بعد.

إليك كيفية عمل العملية خطوة بخطوة:

  1. فهم ما شاهده المستخدم: تبدأ الدالة بتحديد جميع الحلقات التي استمع إليها المستخدم المحدد (user_id).

  2. تحديد الفئات المفضلة للمستخدم: باستخدام قائمة الحلقات التي استمع إليها المستخدم، تقوم الدالة بعد ذلك بتحديد الفئات (categories) التي تنتمي إليها تلك الحلقات. على سبيل المثال، إذا استمع المستخدم لعدة حلقات رياضية وحلقات دين، فسيتم تسجيل كلتا الفئتين.

  3. تحديد الفئات الأكثر اهتمامًا: بعد جمع جميع الفئات التي شاهدها المستخدم، تقوم الدالة بحساب عدد مرات ظهور كل فئة. ثم تحدد أكثر 3 فئات مشاهدة من قبل هذا المستخدم. هذه الفئات تمثل اهتماماته الرئيسية.

  4. اقتراح حلقات جديدة من الفئات المفضلة: في الخطوة الأخيرة، تبحث الدالة في جميع الحلقات المتاحة (episodes_df) عن تلك التي تنتمي إلى الفئات الثلاثة المفضلة لدى المستخدم. الأهم من ذلك، أنها تستبعد أي حلقات يكون المستخدم قد استمع إليها بالفعل.

  5. تقديم أفضل التوصيات: تعرض الدالة أفضل 3 حلقات تم العثور عليها ضمن هذه المعايير كتوصيات نهائية للمستخدم.

بهذه الطريقة، نضمن أن التوصيات ذات صلة مباشرة باهتمامات المستخدم المحددة، مما يزيد من احتمالية تفاعله مع المحتوى الجديد والاستمتاع به.



الفكرة العامة لاقتراح التوصيات (الدالة recommend_episodes_2)

تهدف هذه الدالة إلى تقديم توصيات ذكية ومُحسّنة لحلقات البودكاست للمستخدمين. تعتمد الفكرة العامة على الجمع بين تفضيلات المستخدم الفردية (based on categories) وشعبية الحلقات العامة لتقديم توصيات أكثر فعالية وتنوعًا.

إليك كيفية عمل العملية خطوة بخطوة:

  1. حساب شعبية الحلقات: تُحسب هذه الدالة أولاً العدد الإجمالي لمرات الاستماع لكل حلقة في جميع البيانات المتاحة. هذا يمنحنا مقياسًا لشعبية كل حلقة بشكل عام، بغض النظر عن المستخدم.

  2. تحديد الحلقات التي استمع إليها المستخدم بالفعل: تُحدد الدالة جميع معرفات الحلقات التي استمع إليها المستخدم المحدد (user_id)، لضمان عدم اقتراح حلقات سبق له مشاهدتها.

  3. تحديد الفئات المفضلة للمستخدم (مع الترتيب): تُحلل الدالة الفئات التي استمع إليها المستخدم في الماضي، وتُحصي تكرار كل فئة. ثم تقوم بترتيب هذه الفئات تنازليًا حسب عدد مرات الاستماع، مما يعطينا الفئات الأكثر تفضيلاً للمستخدم.

  4. اقتراح من الفئات المفضلة (مع الأخذ بالشعبية):

    • تمر الدالة على الفئات المفضلة لدى المستخدم بالترتيب.
    • لكل فئة، تبحث عن الحلقات التي تنتمي إليها والتي لم يستمع إليها المستخدم بعد.
    • تقوم بفرز هذه الحلقات أولاً حسب شعبيتها (عدد مرات الاستماع الكلي)، ثم حسب معرف الحلقة (للحصول على ترتيب مستقر في حالة تساوي الشعبية).
    • تضيف أفضل الحلقات من هذه الفئة إلى قائمة التوصيات، مع التأكد من عدم تجاوز 3 توصيات إجمالاً، وتجنب تكرار الحلقات الموصى بها.
  5. ملء التوصيات بحلقات شائعة عالميًا (إذا لزم الأمر): إذا لم تتمكن الدالة من العثور على 3 توصيات من الفئات المفضلة للمستخدم (على سبيل المثال، إذا كان المستخدم قد استمع بالفعل إلى جميع الحلقات الشائعة في فئاته المفضلة، أو إذا كانت فئاته المفضلة تحتوي على عدد قليل من الحلقات)، فإنها تلجأ إلى اقتراح الحلقات الأكثر شعبية عالميًا (لم يستمع إليها المستخدم بعد) لملء العدد المطلوب من التوصيات (حتى 3).

  6. إرجاع التوصيات النهائية: تُرجع الدالة أفضل 3 توصيات في شكل إطار بيانات يحتوي على معرف الحلقة، العنوان، والفئة.


الفروقات الرئيسية عن الطريقة السابقة (recommend_episodes)

هناك عدة فروقات جوهرية تجعل recommend_episodes_2 أكثر تعقيدًا وقوة:

  1. دمج عامل الشعبية (Popularity):

    • الطريقة السابقة: كانت تركز فقط على الفئات المفضلة للمستخدم وتختار أي 3 حلقات منها لم يستمع إليها. لم تأخذ في الاعتبار مدى شعبية هذه الحلقات بين جميع المستخدمين.
    • الطريقة الجديدة: تُحسب أولاً شعبية كل حلقة بناءً على عدد مرات الاستماع الإجمالي. عند اقتراح الحلقات ضمن الفئات المفضلة، تُعطى الأولوية للحلقات الأكثر شعبية. هذا يزيد من احتمالية أن تكون التوصيات ذات جودة عالية ومرغوبة من قبل قطاع أوسع من الجمهور.
  2. ترتيب الفئات المفضلة:

    • الطريقة السابقة: كانت تأخذ "أعلى 3 فئات" بشكل مباشر، وقد لا تكون بالضرورة مرتبة حسب الأفضلية الفعلية للمستخدم في حالة وجود فئات لها نفس عدد المشاهدات.
    • الطريقة الجديدة: تقوم بفرز الفئات المفضلة للمستخدم تنازليًا حسب عدد مرات الاستماع، مما يضمن أننا نبدأ البحث عن التوصيات في الفئة الأكثر تفضيلاً للمستخدم أولاً.
  3. التعامل مع السيناريوهات التي لا توجد فيها توصيات كافية:

    • الطريقة السابقة: إذا لم تجد 3 حلقات في الفئات المفضلة للمستخدم، فقد تُرجع أقل من 3 توصيات.
    • الطريقة الجديدة: تحتوي على آلية احتياطية. إذا لم يتمكن النظام من ملء 3 توصيات من الفئات المفضلة للمستخدم، فإنه يلجأ إلى اقتراح أكثر الحلقات شعبية عالميًا (لم يستمع إليها المستخدم بعد) لضمان تقديم 3 توصيات دائمًا (إذا كانت البيانات تسمح بذلك).
  4. تجنب تكرار التوصيات بشكل أفضل:

    • الطريقة الجديدة: تضمن أن الحلقات الموصى بها بالفعل لا تُعاد اقتراحها ضمن الفئات اللاحقة أو كحلقات شائعة عالميًا، مما يضمن أن التوصيات فريدة.

باختصار، recommend_episodes_2 هي نظام توصية أكثر تطوراً يوازن بين التفضيلات الشخصية للمستخدم والجاذبية العامة (الشعبية) للمحتوى، ويوفر توصيات أكثر اكتمالاً وموثوقية.


شكرًا جزيلًا لوقتكم واهتمامكم

إيمان البلخي